Resource allocation systems have been developed that allocate one or more resources to a client that then utilizes the resource. When the client has completed utilizing the resource, the resource allocation systems deallocate the resource. One example of a resource allocation system is a conventional file system. The conventional file system operates as part of an operating system and manages the files within the computer system. The file system receives requests from application programs (i.e., clients) to access the files, and in response to receiving one such request, the file system allocates the file to the application program and may prevent use of the file by other application programs. After the file is allocated to the application program, the application program may read data from the file or write data to the file. From this perspective, the application program is a client, and the file system is a server.
When an application program requests to read data from an allocated file, the file system accesses the file from a secondary storage device and returns the data to the application program. The processing overhead associated with accessing a secondary storage device, such as a hard disk drive, is significantly greater than accessing memory. Therefore, in order to improve performance, some conventional file systems have adopted a prefetching technique. The term "prefetching " refers to a resource allocation system predicting additional resources that the client may soon utilize and allocating those resources at the same time as the requested resource so that if the client does utilize one of the prefetched resources, a significant performance improvement occurs. For example, in some conventional file systems, when an application program requests to read data from a file, the file system will return the data to the application program, and additionally, the file system, regardless of the amount of data requested, will retrieve up to the 64K of data that follows the returned data and store it into a memory buffer (or a memory cache). At a later time, when the application program requests to read more data from the file, if the data is found among the buffered data, a significant performance improvement occurs because memory is accessible much faster than a hard disk drive. Therefore, it is desirable to add prefetching to a resource allocation system.